The Component Object Model (COM) standard is an interface standard that may be used to enable inter-process communications. The term COM may refer to various inter-process communication technologies, such as ActiveX, COM+, and DCOM. COM may implement objects that can be used in environments different from the environment they were created in. For example, DCOM is a technology that facilitates communication among software components distributed across networked computers.
COM technologies may also be implemented in virtual environments, but virtual environments may cause various problems for COM communications. When a process, such as a COM server, is virtualized, any registry changes it makes may not be visible to the underlying system. For example, a COM server may be registered in a virtual environment. A COM client in the virtual environment may attempt to instantiate a COM object through the COM server. As part of the attempt to instantiate the COM object, the client may identify a specific COM class and interface. A remote procedure call process, such as a Remote procedure call Subsystem (RpcSs) process, may look up the COM class. However, the RpcSs process may run at a system level, rather than in the virtual environment, and may not be able to see into the virtual environment where the COM server is registered. As a result, the RpcSs process may fail to instantiate the COM object.
As another example, a COM client may be running in a first virtual environment while a COM server may be running is a second, different virtual environment. The client may attempt to use a CoCreateInstance( ) call to instantiate a COM object associated with the COM server. However, CoCreateInstance( ) may return a “Class Not Registered” error because the remote procedure call process, which may be running at a system level, may not be able to see into the second virtual environment where the COM server is registered.
In a third example, a COM client may be running in a system environment while a COM server may be registered in a virtual environment. As with the other examples, the client may not be able to instantiate a COM object through the COM server because the COM server is registered in the virtual environment. Traditional virtualization technologies do not address these COM communication issues. What is needed, therefore, is the ability to better facilitate COM communications in virtual environments.